package com.anlu.pattern.structrue.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * <p>
 * Description:
 * 代理类在程序运行时创建的代理方式被成为动态代理。在静态代理中，代理类（RenterProxy）是自己已经定义好了的，
 * 在程序运行之前就已经编译完成。而动态代理是在运行时根据我们在Java代码中的“指示”动态生成的。
 * 动态代理相较于静态代理的优势在于可以很方便的对代理类的所有函数进行统一管理，
 * 如果我们想在每个代理方法前都加一个方法，如果代理方法很多，我们需要在每个代理方法都要写一遍，很麻烦。而动态代理则不需要
 * <p>
 * <p>
 *
 * @author anlu
 * @date 2022/5/5 15:01
 */
public class RenterInvocationHandler<T> implements InvocationHandler {

    //被代理的对象
    private T target;

    public RenterInvocationHandler(T target) {
        this.target = target;
    }

    /**
     * 方法描述: 动态代理
     * 
     * @param proxy 代表动态代理对象
     * @param method 代表在正在执行的方法
     * @param args 代表调用目标方法时传入的参数
     * @return java.lang.Object
     * @author 安路路
     * @date 2022/5/5  15:05
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //代理过程中插入其他操作
        System.out.println("==租客和中介交流");
        Object res = method.invoke(target,args);
        return res;
    }
}
